package cn.cosmosx.base.constant;

import lombok.Getter;

/**
 * 响应结果代码
 *
 * @author geng
 */
@Getter
public enum ResultCode {
    S("响应成功", "操作成功"),
    E("响应失败", "操作失败"),

    // 系统相关
    E00000("解析枚举异常", "不存在的枚举字典值"),
    E00001("转换错误"),
    E00002("PROPERTY COPY ERROR"),
    E00003("Token解析格式错误"),
    E00004("Token已过期"),
    E00005("无效的Token"),
    E00006("Token参数错误"),
    E00089("类执行错误"),
    E00099("类加载错误"),

    //参数相关
    P00000("参数为空"),
    P00002("参数错误"),
    P00003("参数异常"),
    P00004("参数格式错误"),
    P00005("非法参数"),

    //用户相关
    U00000("Token异常", "登录错误，请重新登录"),
    U00001("未登录"),
    U00002("被踢出", "您的账号已在别的地方登录，如非本人操作请即时修改密码"),
    U00003("Token失效", "登录信息已过期，请重新登录"),
    U00004("无权限访问", "无权限访问"),
    U10000("无权限操作", "无权限操作"),
    U90001("密码错误", "用户名或密码错误"),
    U90002("不存在的账户", "用户名或密码错误"),
    U90003("用户已锁定"),
    U90004("密码错误", "您输入错误密码次数过多，请X小时后重新登录"),
    U90009("登录失败", "登录失败"),
    U90010("非法IP", "非法IP"),

    //第三方服务相关
    N00000("网络异常", "请求网络繁忙"),
    N00001("代理错误", "代理配置不合法"),

    // 业务相关
    B00000("业务错误", "业务繁忙"),
    ;

    /**
     * 描述
     */
    private final String desc;

    /**
     * 响应消息
     */
    private final String message;

    ResultCode(String desc) {
        this.desc = desc;
        this.message = desc;
    }

    ResultCode(String desc, String message) {
        this.desc = desc;
        this.message = message;
    }

    /**
     * 通过code拿到对应枚举
     *
     * @param code - 枚举code
     * @return - 找到返回对应枚举；否则返回null
     */
    public static ResultCode fromCode(String code) {
        for (ResultCode value : ResultCode.values()) {
            if (value.name().equals(code)) {
                return value;
            }
        }
        return null;
    }
}
